package com.helisa;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Handler;
import android.os.Message;

public class Alerts 
{
	private Alerts() {	}
	
	private static ProgressDialog progressDialog;

	/**
	 * Muestra un dialogo en el que se toma una desicion Si o No
	 * @param a La actividad donde se mostrara el alert
	 * @param title Titulo del alert. Si es null, no colocara titulo. 
	 * @param message El mensaje del alert.
	 * @param onClickListenerYes evento al hacer click en Yes
	 * @param onClickListenerNo evento al hacer click en No
	 */
	public static void createAlertDialogYesNo( final Activity a, String title, String message, DialogInterface.OnClickListener onClickListenerYes, DialogInterface.OnClickListener onClickListenerNo ){

		AlertDialog.Builder builder = new AlertDialog.Builder(a);
		builder.setTitle(title);
		builder.setMessage(message)
		.setCancelable(false)
		.setPositiveButton("Yes", onClickListenerYes)
		.setNegativeButton("No", onClickListenerNo);
		AlertDialog alert = builder.create();
		alert.show();
	}

	/**
	 * Muestra un dialogo simple con un boton OK. 
	 * @param a La actividad donde se mostrara el alert
	 * @param title  Titulo del alert. Si es null, no colocara titulo.
	 * @param message
	 */
	public static void createInformationDialog(final Activity a, String title, String message){
		AlertDialog.Builder builder = new AlertDialog.Builder(a);
		if(title != null)
			builder.setTitle(title);
		builder.setMessage(message)
		.setCancelable(false)
		.setPositiveButton("OK",null);
		AlertDialog alert = builder.create();
		alert.show();
	}

	/**
	 * Muestra un dialogo simple con un boton OK. 
	 * Es de Informacion con evento al clic del boton.
	 * @param a La actividad donde se mostrara el dialogo
	 * @param title  Titulo del dialogo. (<code>null<code> si no se desea)
	 * @param message
	 * @param onClickListenerOk evento al hacer click en OK
	 */
	public static void createAlertDialogOk( final Activity a, String title, String message,DialogInterface.OnClickListener onClickListenerOk){
		AlertDialog.Builder builder = new AlertDialog.Builder(a);
		if(title != null)
			builder.setTitle(title);
		builder.setMessage(message)
		.setCancelable(false)
		.setPositiveButton("OK",onClickListenerOk);
		AlertDialog alert = builder.create();
		alert.show();
	}
	
	
	/**
	 * Muestra un Dialogo de Progreso Indeterminado. 
	 * @param a La actividad que intenta abrir el dialogo
	 * @param title El titulo del Dialogo. Null si no se desea.
	 * @param message El mensaje del Dialogo
	 * @param cancelable <tt>false</tt> Si el proceso no es cancelable
	 * @param runnable El objeto que representa la interfaz <code>RunnableProgress</code>
	 */
	public static void createProgressDialog(final Activity a, String title, String message, boolean cancelable, RunnableProgress runnable){
		ProgressDialog p = inicializarProgressDialog(a, title, message, true, cancelable);
		p.show();
		runnable.setProgressDialog(p);
	 	Thread t = new Thread(runnable);
	 	t.start();
	}
	
	/**
	 * Muestra un Dialogo de Progreso Determinado. 
	 * @param a La actividad que intenta abrir el dialogo
	 * @param title El titulo del Dialogo. Null si no se desea.
	 * @param message El mensaje del Dialogo
	 * @param cancelable <tt>false</tt> Si el proceso no es cancelable
	 * @param runnable El objeto que representa la interfaz <code>RunnableProgressDeterminate</code>
	 */
	public static void createProgressDialog(final Activity a, String title,  String message, boolean cancelable, RunnableProgressDeterminate runnable){
		ProgressDialog p = inicializarProgressDialog(a, title, message, false, cancelable);
		p.show();
		runnable.setProgressDialog(p);
		Thread t = new Thread(runnable);
	 	t.start();
	}
	
	/**
	 * Inicializa un Dialogo de Progreso. Es llamado por el
	 * metodo <code>createProgressDialog</code>
	 * @param a La actividad que intenta abrir el dialogo
	 * @param title El titulo del Dialogo. Null si no se desea.
	 * @param message El mensaje del Dialogo
	 * @param cancelable <tt>false</tt> Si el proceso no es cancelable
	 * @param runnable El objeto que representa la interfaz <code>RunnableProgressDeterminate</code>
	 */
	private static ProgressDialog inicializarProgressDialog( final Activity a, String title,  String message, boolean indeterminate, boolean cancelable ){
		ProgressDialog progressDialog = new ProgressDialog(a);
		if(title!=null)		progressDialog.setTitle(title);
		progressDialog.setMessage(message);
		progressDialog.setIndeterminate(indeterminate);
		if(!indeterminate) 	progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		progressDialog.setCancelable(cancelable);
		progressDialog.setProgress(0);
		return progressDialog;
	}
}
